package com.my.adminservice.map.domain.dto;

import lombok.Data;

/**
 * 坐标相对位置参考
 */
public class AddressReferenceDTO {
    /**
     * 坐标内部类，封装经纬度信息
     */
    @Data
    public static class Coordinate {
        /** 纬度 */
        private double lat;
        /** 经度 */
        private double lng;
    }

    /**
     * 知名区域内部类，如商圈或高知名度区域
     */
    @Data
    public static class FamousArea {
        /** 地理唯一标识 */
        private String id;
        /** 区域名称/标题 */
        private String title;
        /** 区域坐标信息 */
        private Coordinate location;
        /** 到输入坐标的直线距离 */
        private Double _distance;
        /** 到输入坐标的方位关系（如：北、南、内） */
        private String _dir_desc;
    }

    /**
     * 商圈内部类，结构同知名区域
     */
    @Data
    public static class BusinessArea {
        /** 商圈信息，结构同FamousArea */
        private FamousArea business_area;
    }

    /**
     * 乡镇街道内部类（四级行政区）
     */
    @Data
    public static class Town {
        /** 乡镇街道唯一标识（行政区划代码adcode） */
        private String id;
        /** 乡镇街道名称 */
        private String title;
        /** 地理位置坐标 */
        private Coordinate location;
        /** 到输入坐标的直线距离 */
        private Double _distance;
        /** 到输入坐标的方位关系 */
        private String _dir_desc;
    }

    /**
     * 一级地标内部类（高识别性、大规模地点）
     */
    @Data
    public static class Landmark1 {
        /** 一级地标信息，结构同FamousArea */
        private FamousArea landmark_l1;
    }

    /**
     * 二级地标内部类（较一级地标更精确、规模更小）
     */
    @Data
    public static class Landmark2 {
        /** 二级地标信息，结构同FamousArea */
        private FamousArea landmark_l2;
    }

    /**
     * 道路信息内部类
     */
    @Data
    public static class Street {
        /** 道路信息，结构同FamousArea */
        private FamousArea street;
    }

    /**
     * 门牌号信息内部类
     */
    @Data
    public static class StreetNumber {
        /** 门牌号信息，结构同FamousArea */
        private FamousArea street_number;
    }

    /**
     * 交叉路口信息内部类
     */
    @Data
    public static class Crossroad {
        /** 交叉路口信息，结构同FamousArea */
        private FamousArea crossroad;
    }

    /**
     * 水系信息内部类
     */
    @Data
    public static class Water {
        /** 水系信息，结构同FamousArea */
        private FamousArea water;
    }

    /**
     * 海洋信息内部类
     */
    @Data
    public static class Ocean {
        /** 海洋唯一标识 */
        private String id;
        /** 海洋名称 */
        private String title;
    }
}
